package com.model;

import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

import com.common.BaseModel;
import com.type.TipoActualizacionEnum;
import com.type.TipoTarifarioEnum;

@SuppressWarnings("serial")
@Entity
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class ActualizacionTarifario extends BaseModel {

	@Id
	@SequenceGenerator(name = "id", sequenceName = "ActualizacionTarifarioSEQ")
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "id")
	@Column(unique = true)
	private Long id;

	@Enumerated(EnumType.STRING)
	private TipoActualizacionEnum tipoActualizacion;

	@Column(precision = 20, scale = 2)
	private BigDecimal valor;

	@OneToOne(fetch = FetchType.EAGER, optional = true)
	private Familia familia;

	@OneToOne(fetch = FetchType.EAGER, optional = true)
	private Producto producto;

	@Basic
	private Boolean tarifarioFuturos;

	@Basic
	private Date fecha;

	@Enumerated(EnumType.STRING)
	private TipoTarifarioEnum tipoTarifario;

	public ActualizacionTarifario(Long id,
			TipoActualizacionEnum tipoActualizacion, BigDecimal valor,
			Familia familia, Producto producto, Boolean tarifarioFuturos,
			Date fecha, TipoTarifarioEnum tipoTarifario) {
		this.id = id;
		this.tipoActualizacion = tipoActualizacion;
		this.valor = valor;
		this.familia = familia;
		this.producto = producto;
		this.tarifarioFuturos = tarifarioFuturos;
		this.fecha = fecha;
		this.tipoTarifario = tipoTarifario;
	}

	public ActualizacionTarifario() {
		this(null, null, null, null, null, null, null, null);
	}

	@Override
	public Long getID() {
		return id;
	}

	@Override
	public void setID(Long id) {
		this.id = id;
	}

	public TipoActualizacionEnum getTipoActualizacion() {
		return tipoActualizacion;
	}

	public void setTipoActualizacion(TipoActualizacionEnum tipoActualizacion) {
		this.tipoActualizacion = tipoActualizacion;
	}

	public BigDecimal getValor() {
		return valor;
	}

	public void setValor(BigDecimal valor) {
		this.valor = valor;
	}

	public Familia getFamilia() {
		return familia;
	}

	public void setFamilia(Familia familia) {
		this.familia = familia;
	}

	public Producto getProducto() {
		return producto;
	}

	public void setProducto(Producto producto) {
		this.producto = producto;
	}

	public Boolean getTarifarioFuturos() {
		return tarifarioFuturos;
	}

	public void setTarifarioFuturos(Boolean tarifarioFuturos) {
		this.tarifarioFuturos = tarifarioFuturos;
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public TipoTarifarioEnum getTipoTarifario() {
		return tipoTarifario;
	}

	public void setTipoTarifario(TipoTarifarioEnum tipoTarifario) {
		this.tipoTarifario = tipoTarifario;
	}

}
